package com.nnggstory.logs.webserver;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.nnggstory.logs.common.IServer;

public class SimpleWebServer extends Thread implements IServer {
	public static final int DEFAULT_PORT = 8080;
	private static final Logger logger = LoggerFactory.getLogger(SimpleWebServer.class);
	private Map<String, Object> serverContext = null;
	private int port = 0;
	
	public SimpleWebServer() {
		this(DEFAULT_PORT);
	}
	
	public SimpleWebServer(int port) {
		this.port = port;
	}
	
	@Override
	public void run() {
		// 서버소켓을 생성한다. 웹서버는 기본적으로 80번 포트를 사용한다.
		try {
			ServerSocket listenSocket = new ServerSocket(port);
			logger.info("WebServer Socket Created");
			
			Socket connectionSocket;
			WebServerThread serverThread;
			
			// 순환을 돌면서 클라이언트의 접속을 받는다.
			// accept()는 Blocking 메서드이다.
			while((connectionSocket = listenSocket.accept()) != null) {
				// 서버 쓰레드를 생성하여 실행한다.
				serverThread = new WebServerThread(connectionSocket, serverContext);
				serverThread.start();
			}
		} catch (Exception e) {
			logger.error("WebServer cant start!", e);
		}
	}

	@Override
	public int getPort() {
		return port;
	}

	@Override
	public void serverStart() {
		start();
	}

	@Override
	public void setContext(Map<String, Object> context) {
		serverContext = context;
	}
}
